Computing systems are commonly used today. A computing system often communicates with different devices using device drivers. Various entities, for example, processes, tasks, interrupt handlers and others communicate using a command-request-response (CRRI) interface in a device-driver communication model.
Conventional device-driver model that use a CRRI has challenges. For example, different entities may have their own distinct characteristics and they tend to use custom CRRIs, which has limited the development of a generic interface. This approach has limitations because managing multiple types of CRRI for different entities becomes complex and burdensome.
Furthermore, even when similar entities (i.e. the same entity type) use the same CRRI, then each entity can use the CRRI asynchronously to issue commands to a device. For example, two similar entities may issue commands to the same device/module at the same time for reading or writing data. The entities then have to coordinate the operations associated with the command to avoid any potential conflict. This can be inefficient especially when the entities have to perform various operations and also have to expend resources in synchronizing how the commands are being processed. If the operations are not synchronized then there may be possible conflicts, which can produce invalid results. Continuous efforts are being made for developing a generic framework for computing devices to communicate with each other.